auto.waitFor()

var 手机号 = ''

var 验证码请求地址 = ''

var 姓名 = ''

var 身份证号码 = ''

var 目前是否在使用备用用户 = false

var 实名认证待审核循环次数 = 0

var 实名认证失败循环次数 = 0

var 脚本停留时间 = 0

var 扫描二维码次数 = 0

var 全局计时器ID = "";

var 手机号是否已经登录 = false

var 线程A = threads.start(function () {})

var 线程B = threads.start(function () {})
// 后台接口开始

//1号位 在测
//   var 服务端请求地址 = 'http://192.168.1.16:18115'
//2号位 在测
//   var 服务端请求地址 = 'http://192.168.1.10:18115'
//3号位 在测
 var 服务端请求地址 = 'http://192.168.1.13:18115'
//4号位 在测
//    var 服务端请求地址 = 'http://192.168.8.117:18115'
//5号 在测
//  var 服务端请求地址 = 'http://192.168.8.115:18115'
//6号位
//   var 服务端请求地址 = 'http://192.168.8.114:18115'
//7号位 在测
//  var 服务端请求地址 = 'http://192.168.8.116:18115'
//8号位 在测
//  var 服务端请求地址 = 'http://192.168.1.65:18115'
//9号位
//  var 服务端请求地址 = 'http://192.168.1.160:18115'
//10号 在测
//    var 服务端请求地址 = 'http://192.168.1.175:18115'

// 用户选择了哪一个公司

var companyNameList = []

var companyIDList = []

var 异常备份服务端地址 = 'http://scrap-library.yookelai.net'

function 获取公司数据FUN() {
    var 获取公司数据 = http.postJson(服务端请求地址 + '/getDeptList', {})

    var 获取公司数据JSON = 获取公司数据.body.json()

    if (获取公司数据.statusCode == 200 && 获取公司数据JSON.statusCode == '0000') {

        companyNameList = 获取公司数据JSON.data.map(item => {
            return item.companyName
        })

        companyIDList = 获取公司数据JSON.data.map(item => {
            return item.companyId + ''
        })

    } else {

        toastLog('获取公司数据失败')

        exit()

    }
}

function 获取用户信息FUN() {

    var 获取用户信息 = http.postJson(服务端请求地址 + '/getUserInfo', {
        'companyId': 选择的公司ID
    })

    var 获取用户信息JSON = 获取用户信息.body.json()

    if (获取用户信息.statusCode == 200 && 获取用户信息JSON.statusCode == '0000') {

        // 成功
        手机号 = 获取用户信息JSON.data.mobile
        验证码请求地址 = 获取用户信息JSON.data.token
        姓名 = 获取用户信息JSON.data.userName
        身份证号码 = 获取用户信息JSON.data.idCard

        log('手机号-' + 手机号)
        log('验证码请求地址-' + 验证码请求地址)
        log('姓名-' + 姓名)
        log('身份证号码-' + 身份证号码)
    } else {
        log('无用户信息')
        // 失败
        exit()
    }
}

function 获取用户正面照FUN() {

    var 获取用户正面照 = http.postJson(服务端请求地址 + '/getIDCard', {
        'companyId': 选择的公司ID,
        'idNumber': 身份证号码,
        'type': '0'
    })

    log(获取用户正面照)

    if (获取用户正面照.statusCode == 200) {

    } else {
        // 失败
        exit()
    }
}

function 获取用户背面照FUN() {

    var 获取用户背面照 = http.postJson(服务端请求地址 + '/getIDCard', {
        'companyId': 选择的公司ID,
        'idNumber': 身份证号码,
        'type': '1'
    })

    log(获取用户背面照)

    if (获取用户背面照.statusCode == 200) {

    } else {
        // 失败
        exit()
    }
}

function 获取登录二维码FUN() {

    var 获取登录二维码 = http.postJson(服务端请求地址 + '/getQRcode', {
        'companyId': 选择的公司ID
    })

    log(获取登录二维码)

    if (获取登录二维码.statusCode == 200) {


        var 获取登录二维码JSON = 获取登录二维码.body.json()


        if (获取登录二维码JSON.statusCode == '0000') {

            log('获取登录二维码成功了')

        } else if (获取登录二维码JSON.statusCode == '9001') {

            toastLog('获取二维码超时，需重新获取二维码')

            获取登录二维码FUN()

        } else {

            log('获取二维码异常')

            exit()

        }

    } else {
        // 失败
        exit()
    }
}

function 获取备用身份证信息FUN() {

    var 获取备用身份证信息 = http.postJson(服务端请求地址 + '/getIDInfo', {})

    log(获取备用身份证信息)

    var 获取备用身份证信息JSON = 获取备用身份证信息.body.json()


    if (获取备用身份证信息.statusCode == 200 && 获取备用身份证信息JSON.statusCode == '0000') {


        姓名 = 获取备用身份证信息JSON.data.userName

        身份证号码 = 获取备用身份证信息JSON.data.idCard

        目前是否在使用备用用户 = true

    } else {

        toastLog('获取备用身份证信息失败')

        exit()

    }
}

function 获取备用用户正面照FUN() {

    var 获取备用用户正面照 = http.postJson(服务端请求地址 + '/getIDCard', {
        'companyId': 'common',
        'idNumber': 身份证号码,
        'type': '0'
    })

    log(获取备用用户正面照)


    if (获取备用用户正面照.statusCode == 200) {


    } else {
        // 失败
        exit()
    }
}

// 后台接口结束

function 备份电话信息FUN() {

    var 备份电话信息 = http.postJson(异常备份服务端地址 + '/index/account/scrapAdd', {
        'mobile': 手机号,
        'url': 验证码请求地址
    })

    log(备份电话信息)


    var 备份电话信息JSON = 备份电话信息.body.json()


    if (备份电话信息.statusCode == 200 && 备份电话信息JSON.code == '200') {
    } else {
        // 失败
        exit()
    }
}

function 输入备用用户名和证件号FUN() {

    // 设置用户名
    //id('com.tencent.wework:id/h1i').depth('7').findOne().setText(姓名)
    bounds(330, 568, 1006, 627).findOne(5000).setText(姓名)

    // 设置身份证号码
    sleep(1000)

    //id('com.tencent.wework:id/bay').depth('7').findOne().setText(身份证号码)
    bounds(330, 765, 1006, 824).findOne(5000).setText(身份证号码)

}

function 结束抹机王运行FUN() {
    launchApp("设置")
    sleep(1000)

    id("miui:id/header_view").findOne().click()

    sleep(1000)
    setText("应")
    sleep(1000)
    input("用")
    sleep(1000)
    input("设")
    sleep(1000)
    input("置")
    sleep(3000)
    id("com.android.settings:id/settings_search_item_name").depth(8).text("应用设置").waitFor()

    click("应用设置", 1)

    text("应用管理").waitFor()
    sleep(1000)
    click("应用管理", 0)

    sleep(2000)

    id("com.miui.securitycenter:id/am_search_view").findOne().click()
    sleep(1000)
    setText("抹")
    sleep(1000)
    input("机")
    sleep(1000)
    input("王")

    sleep(2000)

    click("抹机王", 0)
    sleep(2000)
    click(255, 2086)
    sleep(1000)
    click("确定")
    sleep(1000)
    home()
}


function 抹机王操作FUN() {
    log("进入抹机王操作")
    
    sleep(1000)

    // log("结束抹机王运行")
    // 结束抹机王运行FUN()
    // log("结束成功")
    // sleep(1000)

    var 循环进入抹机王次数 = 0

    while (循环进入抹机王次数 <= 5) {
        if (launchApp("抹机王")) {
            log('应用名进入')
            break
        } else {
            var 抹机王应用包名 = getPackageName("抹机王");
            if (launch(抹机王应用包名)) {
                log('应用包名进入')
                break
            }
        }

        循环进入抹机王次数++
    }

    var 循环进入抹机王次数 = 0

    log("我要开始抹机啦！")

    text("抹机清理").waitFor()

    sleep(2000)

    var 抹机清理 = text('抹机清理').findOne(5000)
    if (抹机清理) {
        var 抹机清理坐标 = 抹机清理.bounds()
        click(抹机清理坐标.centerX(), 抹机清理坐标.centerY())
    } else {
        click(33, 344)
    }

    text("任务结束-点击返回").waitFor()

    click("任务结束-点击返回")

    sleep(2000)

    log("抹机完成啦！")

    //结束抹机回到首页
    home()

    sleep(2000)
}

function 打开企业微信FUN() {

    var 循环进入企业微信次数 = 0

    while (循环进入企业微信次数 <= 5) {
        if (launchApp("企业微信")) {
            log('应用名进入')
            break
        } else {
            var 企业微信应用包名 = getPackageName("企业微信");
            if (launch(企业微信应用包名)) {
                log('应用包名进入')
                break
            }
        }
        循环进入企业微信次数++
    }

}

// 暂时未用到
function 开始双开FUN() {
    home()

    sleep(1000)

    //launchApp("设置")
    launchPackage("com.android.settings")

    id("miui:id/header_view").findOne().click()

    setText("应")
    sleep(1000)
    input("用")
    sleep(1000)
    input("设")
    sleep(1000)
    input("置")

    sleep(3000)

    click("应用设置", 1)

    text("应用双开").waitFor()

    click("应用双开", 0)

    text("企业微信").waitFor()

    click("企业微信", 0)

    sleep(2000)

    //开始打开企业微信
    打开企业微信FUN()
}

// 暂时未用到
function 结束双开FUN() {

    // home()

    // sleep(1000)

    // launchApp("设置")
    // launchPackage("com.android.settings")

    // id("miui:id/header_view").findOne().click()

    // setText("应用设置")

    // sleep(1000)

    // click("应用设置", 1)

    // sleep(2000)

    // text("应用双开").waitFor()

    // click("应用双开", 0)

    // sleep(3000)

    // click("企业微信", 0)

    // sleep(2000)

    // click("确定")

    // sleep(2000)
    //sleep(1000)

    //设置企微相机权限为询问FUN()

    sleep(1000)

    home()
}

function 设置企微相机权限为询问FUN() {

    // var 设置应用包名 = getPackageName("设置");
    // launchPackage(设置应用包名)

    launchApp("设置")

    sleep(1000)

    id("miui:id/header_view").findOne().click()

    setText("应")

    sleep(1000)
    input("用")
    sleep(1000)
    input("设")
    sleep(1000)
    input("置")

    sleep(1000)

    id("com.android.settings:id/settings_search_item_name").depth(8).text("应用设置").waitFor()

    click("应用设置", 1)

    text("应用管理").waitFor()
    sleep(1000)
    click("应用管理", 0)

    sleep(2000)

    id("com.miui.securitycenter:id/am_search_view").findOne().click()
    sleep(1000)
    setText("企")

    sleep(1000)
    input("业")
    sleep(1000)
    input("微")
    sleep(1000)
    input("信")

    sleep(2000)

    click("企业微信", 0)

    id('com.miui.securitycenter:id/am_detail_perm').findOne().click()

    //text('企业微信分身').waitFor()
    //text('企业微信').waitFor()
    sleep(1000)

    id("android:id/summary").depth(12).text("拍摄照片和录制视频").waitFor()

    // 开启相机
    text('拍摄照片和录制视频').findOne().parent().parent().click()

    sleep(1000)

    id('com.miui.securitycenter:id/dialog_permission_name').text('相机').waitFor()

    sleep(2000)

    //设置相机权限为询问
    id('com.miui.securitycenter:id/select_ask').depth('11').findOne().click()

}

function 设置企微相机权限为允许FUN() {

    var 设置应用包名 = getPackageName("设置");
    launchPackage(设置应用包名)

    sleep(1000)

    id("miui:id/header_view").findOne().click()

    setText("应")

    sleep(1000)
    input("用")
    sleep(1000)
    input("设")
    sleep(1000)
    input("置")

    sleep(3000)

    click("应用设置", 1)

    text("应用管理").waitFor()

    click("应用管理", 0)

    sleep(3000)

    id("com.miui.securitycenter:id/am_search_view").findOne().click()

    setText("企")

    sleep(1000)
    input("业")
    sleep(1000)
    input("微")
    sleep(1000)
    input("信")

    sleep(2000)

    click("企业微信", 0)

    id('com.miui.securitycenter:id/am_detail_perm').findOne().click()

    //text('企业微信分身').waitFor()
    //text('企业微信').waitFor()
    sleep(3000)

    // 开启相机
    text('拍摄照片和录制视频').findOne().parent().parent().click()

    sleep(1000)

    id('com.miui.securitycenter:id/dialog_permission_name').text('相机').waitFor()

    sleep(1000)


    //设置相机权限为询问
    id('com.miui.securitycenter:id/select_foreground').depth('11').findOne().click()

    sleep(1000)

    /*
    //app.openAppSetting(app.getPackageName('企业微信分身'))
    app.openAppSetting(app.getPackageName('企业微信'))

    text('权限管理').waitFor()

    sleep(3000)

    // 点击权限管理
    id('com.miui.securitycenter:id/am_detail_perm').findOne().click()

    //text('企业微信分身').waitFor()
    //text('企业微信').waitFor()
    sleep(2000)

    // 开启相机
    text('拍摄照片和录制视频').findOne().parent().parent().click()

    sleep(2000)

    id('com.miui.securitycenter:id/dialog_permission_name').text('相机').waitFor()

    sleep(1000)

    // 设置相机权限为使用时允许
    id('com.miui.securitycenter:id/select_foreground').depth('11').findOne().click()

    sleep(1000)*/

}

function 安装分身FUN() {
    home()

    sleep(1000)

    // 利用系统能力点击
    launchApp('小X分身')

    // 利用坐标点击
    // var 分身软件 = text('小X分身').findOne()
    // var 分身软件X = 分身软件.bounds().centerX()
    // var 分身软件Y = 分身软件.bounds().centerY()
    // click(分身软件X, 分身软件Y)

    // 点击制作分身
    id('com.bly.dkplat:id/iv_btn_yjjs').waitFor()

    id('com.bly.dkplat:id/iv_btn_create').findOne().click()

    // 选择企业微信
    text('企业微信').findOne().parent().parent().findOne(text('制作分身')).click()

    // 点击开始制作
    text('开始制作').waitFor()
    id('com.bly.dkplat:id/tv_create').text('开始制作').click()

    // 等待制作完成
    id('com.miui.packageinstaller:id/second_button').waitFor()

    sleep(6000)


    // 点击安装
    id('com.miui.packageinstaller:id/first_button').click()

    sleep(1000)

    // 需要进一步确认按钮
    var 进一步确认安装 = id('com.miui.packageinstaller:id/install_btn').text('安装').findOne(3000)

    if (进一步确认安装) {
        进一步确认安装.click()
    }

    log('安装完成')

    // 安装完成
    id('com.miui.packageinstaller:id/first_button').waitFor()

    sleep(2000)
}

function 卸载分身FUN() {
    // 卸载这个企微分身
    home()

    // 利用系统能力点击
    launchApp('小X分身')

    id('com.bly.dkplat:id/iv_btn_yjjs').waitFor()

    sleep(1000)

    var 卸载分身坐标 = id('com.bly.dkplat:id/tv_name').text('企业微信分身').findOne()
    var 卸载分身坐标X = 卸载分身坐标.bounds().centerX()
    var 卸载分身坐标Y = 卸载分身坐标.bounds().centerY()
    click(卸载分身坐标X, 卸载分身坐标Y)

    // 点击卸载按钮

    textContains("分身管理").waitFor()

    sleep(1000)

    id('com.bly.dkplat:id/tv_btn_del').text('卸载').findOne().click()

    textContains("要卸载此应用吗").waitFor()

    // 确认删除
    id('com.miui.packageinstaller:id/continue_button').text('确定').findOne().click()

    // 卸载成功
    textContains("卸载成功").waitFor()

    id('com.miui.packageinstaller:id/ok_button').text('确定').findOne().click()
}

function 扫一扫FUN() {
    textContains("工作台").waitFor()

    // 开始微信的扫码登录
    // 点击右上角
    click(1008, 136)

    var 是否出现了扫一扫的图标 = textContains('扫一扫').findOne(3000)

    if (是否出现了扫一扫的图标) {

    } else {
        click(1008, 136)

        text('扫一扫').waitFor()
    }

    // 点击扫一扫
    textContains('扫一扫').findOne().parent().click()

    sleep(2000)

    textContains("企业微信登录确认").waitFor()

    sleep(2000)

    //textContains('登录').click()
    click(265, 1927)

    sleep(2000)

    var 判断是否存在文件传输助手 = textContains('文件传输助手').findOne(8000)

    if (判断是否存在文件传输助手) {
        log('成功扫描登陆啦！')

        扫描二维码次数 = 0
    } else {
        //如果未存在 重新扫描 最多五次
        if (扫描二维码次数 <= 5) {

            获取登录二维码FUN()

            sleep(1000)

            //调用企微扫一扫
            扫一扫FUN()

            扫描二维码次数 = 扫描二维码次数 + 1
        }
    }
}

function 登录获取验证码FUN() {


    // 打开分身
    //id('com.miui.packageinstaller:id/second_button').click()

    // 允许分身的权限
    //id('com.lbe.security.miui:id/permission_allow_button').waitFor()

    //sleep(1000)

    //id('com.lbe.security.miui:id/permission_allow_button').click()

    // 分身的初始化
    text('隐私保护指引').waitFor()

    //id('com.tencent.wework:id/cgo').text('同意').click()
    click('同意')

    // 首先判断用户协议是否勾选，如果已经勾选则直接进入下一步，反之亦然
    text("手机号登录").waitFor()

    click('手机号登录')
    //var 用户协议勾选框 = id('com.tencent.wework:id/mz').findOne()
    // var 用户协议勾选框 = className('android.widget.RelativeLayout').depth('7').findOne()

    // var 用户勾选协议状态 = 用户协议勾选框.selected()

    // log('用户是否勾选了用户协议-' + 用户勾选协议状态)

    // if (用户勾选协议状态 == false) {
    //     // 没有勾选则勾选即可
    //     用户协议勾选框.click()
    //     sleep(1000)
    // }

    //click('手机号登录')

    text("同意").waitFor()

    click('同意')

    // 当屏幕出现下一步按钮的时候进行操作

    textContains("下一步").waitFor();
    // 首先判断是否已经勾选了美国区号

    var 已选择区号 = bounds(66, 443, 154, 564).findOne().text()
    log(已选择区号)

    if (已选择区号 == '+1') {
        // 直接输入手机号
    } else {
        // 去选择美国的区号
        textContains(已选择区号).findOne().parent().click()

        textContains("选择国家和地区").waitFor();

        sleep(2000)

        //click(948, 80)
        // 点击右上角的搜索图标
        var 区号搜索按钮 = className('android.widget.LinearLayout').depth('7').drawingOrder('4').indexInParent('2').findOne()
        var 区号搜索按钮X = 区号搜索按钮.bounds().centerX()
        var 区号搜索按钮Y = 区号搜索按钮.bounds().centerY()
        click(区号搜索按钮X, 区号搜索按钮Y)

        sleep(2000)

        // 输入美国
        setText('美国')

        sleep(2000)
        // 选择美国
        click("美国", 1);

    }

    sleep(3000)

    setText(手机号)

    sleep(2000)

    click('下一步')

    text('请输入验证码').waitFor()

    sleep(3000)
}

function 获取验证码FUN() {
    var 手机号验证码响应 = http.get(验证码请求地址)

    var 手机号验证码 = 手机号验证码响应.body.json().message

    return 手机号验证码
}

function 选择头像FUN() {

    sleep(2000)
    click(842, 287)
    sleep(2000)

    text("从相册中选取").waitFor()
    click("从相册中选取")
    /*从 Download 中选取 */
    //id("com.tencent.wework:id/evd").findOne().click()
    sleep(2000)
    click("所有图片")
    sleep(2000)

    //click("Download")
    textContains("Download").findOnce().parent().parent().parent().click()
    sleep(4000)

    var select = true
    var dep = 7
    var inpa = random(0, 15)
    //循环随机选出头像
    while (select) {
        var drwa = inpa + 1
        var view = className("android.widget.RelativeLayout").depth(dep).drawingOrder(drwa).indexInParent(inpa)

        if (view.exists()) {
            var 图像控件 = view.findOne()
            if (图像控件) {
                var 图像控件坐标 = 图像控件.bounds()
                //点击坐标
                click(图像控件坐标.centerX(), 图像控件坐标.centerY())

                var 选择使用 = text("使用").findOne(5000)
                if (选择使用) {
                    select = false

                    //点击使用
                    选择使用.click()

                    toast("选好头像了");

                    break
                } else {
                    continue
                }
            }
        } else {
            inpa = random(0, 15);
        }
    }

}

function 登录选择地区FUN() {
    // 判断是否需要设备验证
    var 是否需要设备验证 = text('你正在使用新设备登录企业微信，为保障帐号安全，请选择一种验证方式，以确保是本人操作').findOne(5000)
    if (是否需要设备验证) {
        // 重头来过
        手机号是否已经登录 = true
        主体FUN()
    }

    log('开始选择地区')

    // 选择账号所属的地区
    click(66, 480)

    sleep(2000)

    textContains("选择国家和地区").waitFor();

    //click(948, 80)
    // 点击右上角的搜索图标
    var 国家搜索按钮 = className('android.widget.LinearLayout').depth('7').drawingOrder('4').indexInParent('2').findOne()
    var 国家搜索按钮X = 国家搜索按钮.bounds().centerX()
    var 国家搜索按钮Y = 国家搜索按钮.bounds().centerY()
    click(国家搜索按钮X, 国家搜索按钮Y)

    sleep(2000)

    // 输入中国
    setText('中国')

    sleep(2000)
    // 选择中国
    click("中国", 1)

    sleep(3000)
    textContains("下一步").waitFor()

    // 下一步
    var 选择中国下一步循环次数 = 0
    while (选择中国下一步循环次数 < 5) {
        var 下一步按钮 = text('下一步').findOne(3000)
        if (下一步按钮) {
            下一步按钮.click()
            break
        } else {
            选择中国下一步循环次数++
            continue
        }
    }

    textContains("腾讯企业微信软件许可及服务协议").waitFor();

    sleep(8000)

    click('同意')

    textContains("隐私政策").waitFor();

    sleep(8000)

    click('同意')

    sleep(2000)

    // 判断是否有存在主体选择
    var 选择主体 = textContains('选择工作身份').findOne(5000)
    if (选择主体) {

        var 主控件 = className("ListView").findOne()
        var 子控件列表 = 主控件.children()

        var 控件下标数组 = []
        子控件列表.forEach((item, position) => {
            控件下标数组.push(position)
        });

        var 控件列表下标长度 = 控件下标数组.length
        var 最后一个控件下标 = 控件列表下标长度 - 1

        var 控件坐标 = 子控件列表[最后一个控件下标].bounds()

        click(控件坐标.centerX(), 控件坐标.centerY())

    }

    sleep(4000)

    var 是否选择头像界面 = text('进入').findOne(3000)
    if (是否选择头像界面) {

        选择头像FUN()

        sleep(2000);

        // 登录进入
        var 登录进入首页循环次数 = 0
        while (登录进入首页循环次数 < 5) {
            var 登录进入按钮 = text('进入').findOne(3000)
            if (登录进入按钮) {
                登录进入按钮.click()
                break
            } else {
                登录进入首页循环次数++
                continue
            }
        }

    } else {
        sleep(1000);
        //返回输入验证码页面
        back();

        sleep(1000)

        textContains('获取验证码').waitFor()

        sleep(41000)

        click("获取验证码")

        sleep(3000)

        var 获取验证码FUN的响应 = 获取验证码FUN()

        var 手机号验证码真实值 = 获取验证码FUN的响应.substring(0, 6)

        if (!手机号验证码真实值) {

            //备份一次当前手机号
            备份电话信息FUN()

            // 重头来过
            主体FUN()
        }

        setText(手机号验证码真实值)

        sleep(1000)

        click('下一步')

        sleep(1000)

        // 检查是否弹窗报错
        var 验证码报错弹窗 = text("确定").exists();

        if (验证码报错弹窗) {
            click('确定')
            sleep(1000)

            //备份一次当前手机号
            备份电话信息FUN()

            // 重头来过
            主体FUN()

        } else {
            var 下一步 = text('下一步').findOne(4000)

            if (下一步) {
                click('下一步')

                sleep(1000)

                var 是否选择头像界面 = text('进入').findOne(3000)
                if (是否选择头像界面) {

                    选择头像FUN()

                    sleep(2000)

                    // 登录进入
                    var 登录进入首页循环次数 = 0
                    while (登录进入首页循环次数 < 5) {
                        var 登录进入按钮 = text('进入').findOne(3000)
                        if (登录进入按钮) {
                            登录进入按钮.click()
                            break
                        } else {
                            登录进入首页循环次数++
                            continue
                        }
                    }

                } else {
                    // 重头来过
                    主体FUN()
                }
            }
        }
    }

    sleep(1000)

}

function 活体检测操作前FUN() {

    手机号是否已经登录 = true

    // 等待首页加载完成
    textContains("工作台").waitFor();

    var 个人设置 = className('android.widget.RelativeLayout').depth('11').findOne()
    var 个人设置X = 个人设置.bounds().centerX()
    var 个人设置Y = 个人设置.bounds().centerY()
    click(个人设置X, 个人设置Y)

    sleep(1000)

    // 等待帮助按钮的出现
    textContains("加入其他企业").waitFor()

    // 点击个人头像按钮
    //id('com.tencent.wework:id/lig').depth('9').findOne().click()
    click(55, 154)

    sleep(1000)

    textContains("红包").waitFor()

    sleep(1000)

    // 继续点击头像
    //id('com.tencent.wework:id/k1j').depth('13').findOne().click()
    click(831, 303)

    textContains("对外信息显示").waitFor()

    sleep(1000)

    // 点击姓名
    //id('com.tencent.wework:id/gtf').depth('11').findOne().click()
    textContains("姓名").findOne().parent().click();
}

function 活体检测操作中FUN() {
    // 点击实名认证
    textContains("实名认证").findOne().parent().parent().parent().parent().click();
    // 输入姓名
    textContains("填写真实姓名").waitFor()

    sleep(1000)
    setText(姓名)
    sleep(1000)

    //点击认证
    click('认证')

    textContains("需提交姓名、身份证号以确定实名信息").waitFor()

    // 输入身份证号码
    textContains("请输入身份证号").setText(身份证号码)

    sleep(1000)

    // 同意并下一步
    var 同意下一步循环次数 = 0
    while (同意下一步循环次数 < 5) {
        var 同意并下一步按钮 = text('同意并下一步').findOne(3000)
        if (同意并下一步按钮) {
            同意并下一步按钮.click()
            break
        } else {
            同意下一步循环次数++
            continue
        }
    }

    // 检测姓名和身份证号是否一致
    var 是否出现了实名认证不一致的情况 = text("确定").findOne(3000);

    if (是否出现了实名认证不一致的情况) {

        // 点击确定按钮，再来一遍
        click('确定')

        实名身份证未通过重新来FUN()
    } else {
        // 勾选人脸识别协议
        textContains("将通过人脸识别验证你的身份信息，请确保是本人操作").waitFor()

        // 同意人脸识别的协议
        textContains("我已阅读并同意《人脸识别身份验证规则》，且知晓以上信息仅用于实名验证，企业微信不会保存我的人脸信息。").findOne().parent().child(0).click()

        sleep(1000)

        click('下一步')

        log("拍摄照片和录制视频")

        sleep(2000)

        // 拍摄照片和录制视频和录音 点击拒绝
        var 拒绝选项1 = textContains("拒绝").findOne(4000)

        拒绝选项1.click()

        sleep(3000)
        //textContains("用普通话大声读出数字").waitFor()

        var 拒绝选项2 = textContains("拒绝").findOne(4000)

        if (拒绝选项2) {
            拒绝选项2.click()
        }

        sleep(2000)

        textContains("开始").waitFor()

        //等待开始按钮出现 然后点击
        var 开始按钮循环次数 = 0
        while (开始按钮循环次数 < 5) {
            var 开始按钮 = textContains("开始").findOne(6000)
            if (开始按钮) {
                开始按钮.click()
                break
            } else {
                开始按钮循环次数++
                continue
            }
        }

        log('我点了开始了')

    }

}

function 实名认证失败后重复执行FUN() {
    // 调用后台接口获取身份证正面照开始
    获取用户正面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证正面照结束

    // 点击拍照，拍正面照
    //id('com.tencent.wework:id/djk').text('重拍').depth('12').findOne().click()
    click(192, 1345)

    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    //id('com.tencent.wework:id/awn').depth('8').findOne().click()
    click(485, 2038)

    textContains('人脸实名认证失败').waitFor()

    sleep(1000)

    // 调用后台接口获取身份证背面照开始
    获取用户背面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证背面照结束

    // 拍反面照
    // id('com.tencent.wework:id/djk').depth('12').text('重拍').find()[1].click()
    click(646, 1345)
    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    // id('com.tencent.wework:id/awn').depth('8').findOne().click()
    click(485, 2038)

    // 等待提交按钮出现 然后点击
    textContains("提交").waitFor()
    sleep(6000)
    click('提交')
    // sleep(4000)

    // var 提交按钮循环次数 = 0
    // while(提交按钮循环次数 < 5) {
    //     var 提交按钮 = textContains("提交").findOne(5000)
    //     if (提交按钮) {
    //         提交按钮.click()
    //         break
    //     } else {
    //         提交按钮循环次数++
    //         continue
    //     }
    // }

}

function 提交身份证照片FUN() {

    textContains('人脸实名认证失败').waitFor()

    sleep(1000)

    home()

    sleep(1000)

    // 打开企微分身的权限设置
    设置企微相机权限为允许FUN()

    // 重新打开微信
    打开企业微信FUN()

    textContains('人脸实名认证失败').waitFor()

    sleep(1000)

    // 调用后台接口获取身份证正面照开始
    // 判断是否需要使用备用照片
    if (目前是否在使用备用用户) {
        log("获取备用用户正面照FUN");
        获取备用用户正面照FUN()
        目前是否在使用备用用户 = false
    } else {
        log("获取用户正面照FUN");
        获取用户正面照FUN()
    }

    sleep(1000)
    // 调用后台接口获取身份证正面照结束
    // 点击拍照，拍正面照
    // id('com.tencent.wework:id/dib').text('拍照').depth('12').findOne().click()
    click(192, 1345)

    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    //id('com.tencent.wework:id/aw0').depth('8').findOne().click()
    click(485, 2038)

    textContains('人脸实名认证失败').waitFor()

    sleep(2000)

    // 调用后台接口获取身份证背面照开始
    获取用户背面照FUN()
    sleep(1000)
    // 调用后台接口获取身份证背面照结束

    // 拍反面照
    // id('com.tencent.wework:id/dib').depth('12').text('拍照').findOne().click()
    click(646, 1345)
    // 点击聚焦
    click(480, 807)

    // 点击拍照
    sleep(5000)
    // id('com.tencent.wework:id/aw0').depth('8').findOne().click()
    click(485, 2038)

    // 等待提交按钮出现 然后点击
    textContains("提交").waitFor()
    sleep(6000)
    click('提交')

    // sleep(4000)

    // var 提交按钮循环次数 = 0
    // while(提交按钮循环次数 < 5) {
    //     var 提交按钮 = textContains("提交").findOne(5000)
    //     if (提交按钮) {
    //         提交按钮.click()
    //         break
    //     } else {
    //         提交按钮循环次数++
    //         continue
    //     }
    // }
}

function 认证成功FUN() {
    // 认证完之后，重新回到首页
    textContains("港澳台及海外用户认证").waitFor()

    sleep(2000)

    click(0, 80)

    //id('com.tencent.wework:id/gtf').findOne(2000)

    // var 身份认证AUTH = id('com.tencent.wework:id/gtf').depth('6').findOne()
    // var 身份认证AUTHX = 身份认证AUTH.bounds().centerX()
    // var 身份认证AUTHY = 身份认证AUTH.bounds().centerY()
    // click(身份认证AUTHX, 身份认证AUTHY)

    //var 完成认证 = id('com.tencent.wework:id/bvd').findOne(3000)

    sleep(2000)

    姓名页面条件 = true
    姓名页面循环次数 = 0
    while (姓名页面条件) {
        if (姓名页面循环次数 > 3) {
            姓名页面条件 = false
            click(0, 80)
            break
        }

        var 姓名控件存在 = className('android.widget.EditText').depth('8').drawingOrder('2').indexInParent('1').findOne(5000)
        if (姓名控件存在) {
            log(姓名控件存在.text())
            if (姓名控件存在.text()) {
                姓名页面条件 = false

                var 返回符号 = className('android.widget.TextView').depth('8').drawingOrder('1').indexInParent('1').findOne(5000)
                var 返回符号X = 返回符号.bounds().centerX()
                var 返回符号Y = 返回符号.bounds().centerY()
                click(返回符号X, 返回符号Y)

                break
            } else {
                姓名页面循环次数 = 姓名页面循环次数 + 1
            }
        } else {
            姓名页面循环次数 = 姓名页面循环次数 + 1
        }
    }

    sleep(1000)

    //log("准备进入实名计时器")

    //实名认证成功计时器1fun()

    //log("准备进入实名计时器成功")

    sleep(1000)

    //log("第二次进入实名验证计时器")
    //实名认证成功计时器1fun()
    //log("第二次进入实名验证计时器成功")
    sleep(1000)
    textContains("对外信息显示").waitFor()

    //back()
    click(0, 80)

    sleep(1000)

    textContains("红包").waitFor()

    //back()
    click(55, 95)

    sleep(1000)

    textContains("加入其他企业").waitFor()

    sleep(1000)

}

function 设置别名FUN() {

    textContains("工作台").waitFor();

    var 个人设置 = className('android.widget.RelativeLayout').depth('11').findOne()
    var 个人设置X = 个人设置.bounds().centerX()
    var 个人设置Y = 个人设置.bounds().centerY()
    click(个人设置X, 个人设置Y)

    sleep(1000)

    // 等待帮助按钮的出现
    textContains("加入其他企业").waitFor()

    // 点击个人头像按钮
    var lig = className("android.widget.RelativeLayout").depth(9).findOne()
    click(lig.bounds().centerX(), lig.bounds().centerY())

    sleep(1000)

    textContains("红包").waitFor()

    sleep(1000)

    // 继续点击头像
    // id('com.tencent.wework:id/k1j').depth('13').findOne().click()
    click(831, 303)

    textContains("对外信息显示").waitFor()

    sleep(1000)

    // 点击对外设置别名
    // id('com.tencent.wework:id/gta').depth('11').findOne().click()
    textContains("对外信息显示").findOne().parent().click()

    textContains("以下信息将对外部联系人显示").waitFor()

    sleep(1000)

    // 点击姓名
    //id('com.tencent.wework:id/k52').depth('8').findOne().click()
    textContains("名字显示").findOne().parent().parent().parent().click()

    // 点击别名
    textContains("别名").waitFor()

    sleep(1000)

    textContains("别名").findOne().parent().click()

    sleep(1000)

    back()

    textContains("以下信息将对外部联系人显示").waitFor()

    sleep(1000)

    back()

    textContains("对外信息显示").waitFor()

    sleep(1000)

    back()

    textContains("红包").waitFor()

    sleep(1000)

    //back()
    click(55, 95)

    textContains("加入其他企业").waitFor()

    sleep(1000)

    back()

}

function 实名认证失败重新来过FUN() {

    if (实名认证失败循环次数 >= 5) {

        实名认证失败循环次数 = 0
        // 重头来过
        主体FUN()

    } else {

        sleep(2000)

        back()

        sleep(1000)

        // 设置企微相机权限为询问
        设置企微相机权限为询问FUN()

        // 打开企业微信
        打开企业微信FUN()

        // 重新输入名称和身份证号码
        // 重新调用获取身份证信息
        textContains("需提交姓名、身份证号以确定实名信息").waitFor()

        获取备用身份证信息FUN()

        输入备用用户名和证件号FUN()

        sleep(2000)

        // 同意并下一步
        var 同意下一步循环次数 = 0
        while (同意下一步循环次数 < 5) {
            var 同意并下一步按钮 = text('同意并下一步').findOne(3000)
            if (同意并下一步按钮) {
                同意并下一步按钮.click()
                break
            } else {
                同意下一步循环次数++
                continue
            }
        }

        // 检测姓名和身份证号是否一致
        var 是否出现了实名认证不一致的情况 = text("确定").findOne(3000);

        if (是否出现了实名认证不一致的情况) {

            // 点击确定按钮，再来一遍
            click('确定')

            实名身份证未通过重新来FUN()

        } else {
            // 勾选人脸识别协议
            textContains("将通过人脸识别验证你的身份信息，请确保是本人操作").waitFor()

            // 同意人脸识别的协议
            textContains("我已阅读并同意《人脸识别身份验证规则》，且知晓以上信息仅用于实名验证，企业微信不会保存我的人脸信息。").findOne().parent().child(0).click()

            sleep(1000)

            click('下一步')

            sleep(2000)

            log("拍摄照片和录制视频")

            // 拍摄照片和录制视频和录音 点击拒绝
            var 拒绝选项1 = textContains("拒绝").findOne(4000)
            if (拒绝选项1) {
                拒绝选项1.click()
            }

            sleep(3000)

            var 拒绝选项2 = textContains("拒绝").findOne(4000)
            if (拒绝选项2) {
                拒绝选项2.click()
            }

            sleep(2000)

            textContains("开始").waitFor()

            //等待开始按钮出现 然后点击
            var 开始按钮循环次数 = 0
            while (开始按钮循环次数 < 5) {
                var 开始按钮 = textContains("开始").findOne(6000)
                if (开始按钮) {
                    开始按钮.click()
                    break
                } else {
                    开始按钮循环次数++
                    continue
                }
            }

            sleep(3000)

            提交身份证照片之后判断用户是否实名认证成功FUN()
        }

    }

}

function 实名身份证未通过重新来FUN() {

    if (实名认证失败循环次数 >= 5) {

        实名认证失败循环次数 = 0

        // 重头来过
        主体FUN()

    } else {

        sleep(2000)

        textContains("需提交姓名、身份证号以确定实名信息").waitFor()

        获取备用身份证信息FUN()

        输入备用用户名和证件号FUN()

        sleep(2000)

        // 同意并下一步
        var 同意下一步循环次数 = 0
        while (同意下一步循环次数 < 5) {
            var 同意并下一步按钮 = text('同意并下一步').findOne(3000)
            if (同意并下一步按钮) {
                同意并下一步按钮.click()
                break
            } else {
                同意下一步循环次数++
                continue
            }
        }

        sleep(2000)

        // 检测姓名和身份证号是否一致
        var 是否出现了实名认证不一致的情况 = text("确定").findOne(3000);

        if (是否出现了实名认证不一致的情况) {

            // 点击确定按钮，再来一遍，重新换个身份证
            click('确定')

            实名身份证未通过重新来FUN()

        } else {
            // 勾选人脸识别协议
            textContains("将通过人脸识别验证你的身份信息，请确保是本人操作").waitFor()

            // 同意人脸识别的协议
            textContains("我已阅读并同意《人脸识别身份验证规则》，且知晓以上信息仅用于实名验证，企业微信不会保存我的人脸信息。").findOne().parent().child(0).click()

            sleep(1000)

            click('下一步')

            sleep(2000)

            log("拍摄照片和录制视频")

            // 拍摄照片和录制视频和录音 点击拒绝
            var 拒绝选项1 = textContains("拒绝").findOne(4000)
            if (拒绝选项1) {
                拒绝选项1.click()
            }

            sleep(3000)

            var 拒绝选项2 = textContains("拒绝").findOne(4000)
            if (拒绝选项2) {
                拒绝选项2.click()
            }

            sleep(2000)

            //等待开始按钮出现 然后点击
            var 开始按钮循环次数 = 0
            while (开始按钮循环次数 < 5) {
                var 开始按钮 = textContains("开始").findOne(6000)
                if (开始按钮) {
                    开始按钮.click()
                    break
                } else {
                    开始按钮循环次数++
                    continue
                }
            }

            sleep(3000)

            提交身份证照片之后判断用户是否实名认证成功FUN()
        }

    }
}

function 实名需要审核重新来过FUN() {

    if (实名认证待审核循环次数 >= 3) {

        实名认证待审核循环次数 = 0

        // 重头来过
        主体FUN()

    } else {

        //点击撤销
        //bounds(898, 80, 1080, 212).click()
        // var 撤销 = className('android.widget.LinearLayout').depth('7').findOne(4000)
        // var 撤销X = 撤销.bounds().centerX()
        // var 撤销Y = 撤销.bounds().centerY()

        //click(撤销X, 撤销Y)
        back()

        sleep(1000)

        // 设置企微相机权限为询问
        设置企微相机权限为询问FUN()

        sleep(1000)

        // 打开企业微信
        打开企业微信FUN()

        // 等待企业微信重新打开
        textContains("需提交姓名、身份证号以确定实名信息").waitFor()

        sleep(2000)

        // 同意并下一步
        var 同意下一步循环次数 = 0
        while (同意下一步循环次数 < 5) {
            var 同意并下一步按钮 = text('同意并下一步').findOne(3000)
            if (同意并下一步按钮) {
                同意并下一步按钮.click()
                break
            } else {
                同意下一步循环次数++
                continue
            }
        }

        sleep(2000)

        // 检测姓名和身份证号是否一致
        var 是否出现了实名认证不一致的情况 = text("确定").findOne(3000);

        if (是否出现了实名认证不一致的情况) {

            // 点击确定按钮，再来一遍
            click('确定')

            实名身份证未通过重新来FUN()

        } else {
            // 勾选人脸识别协议
            textContains("将通过人脸识别验证你的身份信息，请确保是本人操作").waitFor()

            // 同意人脸识别的协议
            textContains("我已阅读并同意《人脸识别身份验证规则》，且知晓以上信息仅用于实名验证，企业微信不会保存我的人脸信息。").findOne().parent().child(0).click()

            sleep(1000)

            click('下一步')

            sleep(2000)

            log("拍摄照片和录制视频")

            // 拍摄照片和录制视频和录音 点击拒绝
            var 拒绝选项1 = textContains("拒绝").findOne(4000)
            if (拒绝选项1) {
                拒绝选项1.click()
            }

            sleep(3000)

            var 拒绝选项2 = textContains("拒绝").findOne(4000)
            if (拒绝选项2) {
                拒绝选项2.click()
            }

            sleep(2000)

            textContains("开始").waitFor()

            //等待开始按钮出现 然后点击
            var 开始按钮循环次数 = 0
            while (开始按钮循环次数 < 5) {
                var 开始按钮 = textContains("开始").findOne(6000)
                if (开始按钮) {
                    开始按钮.click()
                    break
                } else {
                    开始按钮循环次数++
                    continue
                }
            }

            sleep(3000)

            提交身份证照片之后判断用户是否实名认证成功FUN()
        }
    }

}

function 提交身份证照片之后判断用户是否实名认证成功FUN() {
    // 提交身份证照片
    提交身份证照片FUN()

    sleep(5000)

    // 实名认证待审核
    var 实名认证待审核 = text("个人资料已提交审核").exists();

    // 认证成功，但是在身份证号码页面
    var 实名成功但处于身份证页面 = text("需提交姓名、身份证号以确定实名信息").exists();

    // 实名认证失败
    var 实名认证失败ERR = text("实名认证失败").exists();

    if (实名认证失败ERR) {
        // 实名认证失败
        log('实名认证失败')

        sleep(4000)

        text('确定').click()

        实名认证失败循环次数 = 实名认证失败循环次数 + 1;

        sleep(1000)

        // 新增的关于实名认证的递归方法
        实名认证失败重新来过FUN()

    } else if (实名认证待审核) {
        log('实名认证待审核页面')

        sleep(1000)

        实名认证待审核循环次数 = 实名认证待审核循环次数 + 1;

        实名需要审核重新来过FUN()

    } else if (实名成功但处于身份证页面) {

        实名认证失败循环次数 = 0
        实名认证待审核循环次数 = 0

        log('实名成功但处于身份证页面')
        // 实名成功
        认证成功FUN()

        // 回到了首页
        // 设置对外信息为别名
        设置别名FUN()

        // 开始扫一扫
        获取登录二维码FUN()

        // 调用企微扫一扫
        扫一扫FUN()

        //继续下一个
        主体FUN()
    } else {

        实名认证待审核循环次数 = 0
        实名认证失败循环次数 = 0

        log('实名认证成功页面')
        // 实名成功
        认证成功FUN()

        // 回到了首页
        // 设置对外信息为别名
        设置别名FUN()

        // 开始扫一扫
        获取登录二维码FUN()

        // 调用企微扫一扫
        扫一扫FUN()

        //继续下一个
        主体FUN()
    }
}

// 开始执行main方法
function 核心递归FUN() {
    
    // 判断守护线程是否开启
    if (线程B.isAlive()) {
        线程B.interrupt()
    }

    守护线程FUN()

    抹机王操作FUN()

    设置企微相机权限为询问FUN()

    重置参数FUN()

    获取用户信息FUN()

    sleep(1000)

    打开企业微信FUN()

    sleep(1000)

    // 登录获取验证码
    登录获取验证码FUN()

    var 获取验证码FUN的响应 = 获取验证码FUN()

    log(获取验证码FUN的响应.substring(0, 6))

    var 手机号验证码真实值 = 获取验证码FUN的响应.substring(0, 6)

    if (!手机号验证码真实值) {

        //备份一次当前手机号
        备份电话信息FUN()

        // 重头来过
        主体FUN()

    }

    setText(手机号验证码真实值)

    sleep(1000)

    click('下一步')

    sleep(1000)

    // 检查是否弹窗报错
    // var 验证码报错弹窗 = id('com.tencent.wework:id/cgp').depth('5').text('确定').findOne(3000)
    var 账号封禁提示 = textContains("查看详情").exists()
    if (账号封禁提示) {
        click("我知道了")
        sleep(1000)
        // 重头来过
        手机号是否已经登录 = true
        主体FUN()
    }
    var 验证码报错弹窗 = text("确定").findOne(2000)
    if (验证码报错弹窗) {
        click('确定')
        sleep(1000)

        //备份一次当前手机号
        备份电话信息FUN()

        // 重头来过
        主体FUN()

    }

    sleep(1000)

    var 是否已经选择过地区 = text('进入').findOne(3000)

    if (是否已经选择过地区) {
        //点击进入微信首页
        是否已经选择过地区.click()
    } else {
        //未选择过地区，先进行选择
        登录选择地区FUN()
    }

    //判断主体被封
    sleep(1000)
    var 企业账号封禁提示 = textContains('企业账号封禁提示').findOne(5000)
    if (企业账号封禁提示) {
        //放弃该账号，重新跑
        手机号是否已经登录 = true
        主体FUN()
    }

    //进入到企业微信首页
    活体检测操作前FUN()

    // 检测是否完成了实名认证
    var 是否完成了实名认证 = textContains('未认证').findOne(3000)

    if (是否完成了实名认证) {

        活体检测操作中FUN()

        sleep(5000)
        
        // 提交身份证照片之后判断用户是否实名认证成功
        提交身份证照片之后判断用户是否实名认证成功FUN()

    } else {
        // 表示实名过。继续下一个
        主体FUN()
    }
}

function 重置参数FUN() {
    手机号是否已经登录 = false
    手机号 = ''
    验证码请求地址 = ''
    姓名 = ''
    身份证号码 = ''
    目前是否在使用备用用户 = false
    实名认证待审核循环次数 = 0
    实名认证失败循环次数 = 0
    扫描二维码次数 = 0
}

function 程序线程FUN() {
    线程A = threads.start(function () {
        log('进入程序主线程')
        核心递归FUN()
        //成功执行完毕 就干掉守护线程
        // 线程B.interrupt()
        // log('哈哈一轮结束了')
    })
}

function 守护线程FUN() {
    线程B = threads.start(function () {
        log('守护线程开启')
        setTimeout(function () {
            log('太久啦，我要重新开始了')
            //中断程序线程
            线程A.interrupt()
            //如果手机未登录成功过
            if (!手机号是否已经登录) {
                if (手机号) {
                    //备份手机号
                    备份电话信息FUN()
                }
            }
            // 重头来过
            主体FUN()
        }, 600000)
    })
}


function 主体FUN() {
    // 判断守护线程是否开启
    if (线程A.isAlive()) {
        线程A.interrupt()
    }

    程序线程FUN()
}

//开始执行
获取公司数据FUN()

var selectedNum = dialogs.singleChoice("请选择公司", companyNameList, 0);
toast("选择了第" + (selectedNum + 1) + "个选项");

var 选择的公司ID = companyIDList[selectedNum]

主体FUN()

